package com.feng.spring.hibernate.extend.proxy;

import com.feng.spring.hibernate.extend.HibernateExtendFactory;

import java.lang.reflect.Proxy;

/**
 * 代理工厂
 *
 * @author 张俊峰
 */
public class HibernateExtendProxyFactory<T> {
    private final Class<T> hibernateInterface;

    public HibernateExtendProxyFactory(Class<T> hibernateInterface) {
        this.hibernateInterface = hibernateInterface;
    }

    public Class<T> getHibernateInterface() {
        return hibernateInterface;
    }

    public T newInstance(HibernateExtendFactory hibernateExtendFactory) {
        HibernateExtendInvocationHandler<T> handler = new HibernateExtendInvocationHandler<>(hibernateInterface, hibernateExtendFactory);
        return (T) Proxy.newProxyInstance(hibernateInterface.getClassLoader(), new Class[]{hibernateInterface}, handler);
    }

}
